#include "Connection.h"
#include <public.h>
#include <chrono>

// 初始化数据库连接
Connection::Connection()
{
    _conn = mysql_init(nullptr);
}

// 释放数据库连接资源
Connection::~Connection()
{
    if (_conn)
    {
        mysql_close(_conn);
    }
}

// 连接数据库
bool Connection::connect(std::string ip, const unsigned short port, std::string user, std::string passwd, std::string dbname)
{
    // 连接数据库
    MYSQL * result = mysql_real_connect(_conn, ip.c_str(), user.c_str(), passwd.c_str(), dbname.c_str(), port, nullptr, 0);

    return (result != nullptr);
}

// 更新操作 insert、 delete、 update
bool Connection::update(std::string sql)
{
    if (mysql_query(_conn, sql.c_str()))
    {
        LOG("更新失败:" + sql);
        return false;
    }
    return true;
}

// 查询操作 select  返回结果集MYSQL_RES
MYSQL_RES *Connection::query(std::string sql)
{
    if (mysql_query(_conn, sql.c_str()))
    {
        LOG("查询失败:" + sql);
        return nullptr;
    }
    //mysql_use_result(大结果集)串行， 
    //mysql_store_result(较小的结果集)
    return mysql_use_result(_conn);
}

// 刷新refresh连接的起始的空间时间
void Connection::refreshAliveTime()
{
    _aliveTime = std::chrono::steady_clock::now();
}

// 返回存活的时间, 使用doublt表示秒数
std::chrono::duration<double> Connection::getAliveTime() const
{
    return std::chrono::steady_clock::now() - _aliveTime;
}
